package com.gdawj.controleur;

import com.gdawj.ejb.AdministrateurEJBRemote;
import com.gdawj.javabeans.Administrateur;
import com.gdawj.mdb.AbsenceEtudiant;
import com.gdawj.modele.ListeModele;
import com.gdawj.outils.UIBoiteOutils;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.List;
import javax.jms.ConnectionFactory;
import javax.jms.Queue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;


@SuppressWarnings("serial")
public class Fenetre extends JFrame {

	// Reference a la fenetre courante
        private Container conteneur;
	private Fenetre parent;
	private Object[][] donnees;
	private ListeModele modeleListe;
	private JTable table;
        private AdministrateurEJBRemote administrateurEJB;
        // MDB
        private Object[][] donneesMDB;
	private ListeModele modeleListeMDB;
        private JTable tableMDB;
        private ConnectionFactory connectionFactory;
        private Queue queue;

	// Constructeur par defaut
	public Fenetre(AdministrateurEJBRemote administrateurEJB,ConnectionFactory connectionFactory,Queue queue)
	{	
            super("Gestion des administrateurs et absences");
            this.setSize(new java.awt.Dimension(700, 400));
            this.setResizable(true);
            UIBoiteOutils.centerOnScreen(this);
            conteneur=this.getContentPane();
            conteneur.setLayout(new BorderLayout());
            this.parent=this;
            this.administrateurEJB=administrateurEJB;
            this.connectionFactory=connectionFactory;
            this.queue=queue;
	}

	// Construction de l'application
	public void build()
	{
            JPanel panneauJtable=new JPanel();
            JPanel panneauJtableMDB=new JPanel();
            JPanel panneauBouton=new JPanel();
            panneauBouton.setLayout(new FlowLayout());
		
            String[] colonnes=new String[] { "ID", "Identifiant", "Mot de passe", "Nom", "Prénom" };
            donnees=new Object[0][0];
            modeleListe=new ListeModele(donnees,colonnes);
            table=new JTable(modeleListe);
            JScrollPane scrollPane=new JScrollPane(table);
            scrollPane.setAutoscrolls(true);           

            // MDB gestion des absences aux cours
            String[] colonnesMDB=new String[] { "Cours", "Nom", "Prénom", "Absence" };
            donneesMDB=new Object[0][0];
            modeleListeMDB=new ListeModele(donneesMDB,colonnesMDB);
            tableMDB=new JTable(modeleListeMDB);
            JScrollPane scrollPaneMDB=new JScrollPane(tableMDB);

		
		// Bouton permettant d'ajouter un nouvel administrateur
		JButton ajouter=new JButton("Ajouter un administrateur");
		ajouter.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				FenetreAdministrateur fa=new FenetreAdministrateur(parent,null,administrateurEJB);
				fa.build();
			}
		});
				
	
		// Bouton permettant de modifier un administrateur
		JButton modifier=new JButton("Modifier un administrateur");
		modifier.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				// Recuperer l'id de l'administrateur a la ligne
				int ligne=table.getSelectedRow();
				if(ligne>-1)
				{
					int idAdministrateur=Integer.parseInt(table.getValueAt(ligne,0).toString());
				
                                        Administrateur a=administrateurEJB.getAdministrateur(idAdministrateur);
					if(a!=null)
					{
						FenetreAdministrateur fa=new FenetreAdministrateur(parent,a,administrateurEJB);
						fa.build();
					}
				}
			}
		});
		
		
		// Bouton permettant de supprimer un administrateur
		JButton supprimer=new JButton("Supprimer l'administrateur");
		supprimer.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				// Supprimer les administrateurs de la table et du modele
				for (int i : table.getSelectedRows()) {
					// Recuperer l'id de l'administraeur a la ligne
					int idAdministrateur=Integer.parseInt(table.getValueAt(i,0).toString());
					// Choix==2 annulation
					int choix=UIBoiteOutils.afficherMessageConfirmation("Voulez-vous confirmer la suppression de l'id :"+idAdministrateur);
					if(choix==0)
					{
							// Supprimer l'administrateur du modele
							administrateurEJB.supprimer(idAdministrateur);
							// Actualiser la liste
                                                        afficherAdministrateur();
					}
				}
		}});
			
		// Ajouter les boutons dans le panneau
		panneauBouton.add(ajouter);
		panneauBouton.add(modifier);
		panneauBouton.add(supprimer);

		// Ajouter le scrollpane
		panneauJtable.add(scrollPane);
                panneauJtableMDB.add(scrollPaneMDB);

		// Ajouter les panneaux dans le Container
		conteneur.add(panneauBouton,BorderLayout.NORTH);
		conteneur.add(panneauJtable,BorderLayout.CENTER);
                conteneur.add(panneauJtableMDB,BorderLayout.EAST);
		this.pack();
		this.setVisible(true);

		// Afficher la liste des personnes au lancement de l'application
		this.afficherAdministrateur();

                // Afficher la liste des absences
                AbsenceEtudiant ae=new AbsenceEtudiant(connectionFactory,queue);
                ae.setModeleListeMDB(modeleListeMDB);
                ae.setTableMDB(tableMDB);
		
		// Gerer la fermeture de l'application
		this.addWindowListener(new WindowAdapter() {
		public void windowClosing(WindowEvent evt)
		{
			System.exit(0);
		}
		});
	}


	// Fonction qui affiche la liste des administrateurs
	public void afficherAdministrateur()
	{
		Object[][] donnees=new Object[1][5];
		
		// Creer la liste
		List<Administrateur> listeAdministrateurs=(List<Administrateur>)administrateurEJB.getListeAdministrateurs();
				
		// Vider l'ancier modele
		modeleListe.viderModele();
		
		// Creer la liste des administrateurs
		for(Administrateur a:listeAdministrateurs)
		{
			donnees[0][0]=a.getIdPersonne();
			donnees[0][1]=a.getIdentifiant();
			donnees[0][2]=a.getMotdepasse();
			donnees[0][3]=a.getNom();
			donnees[0][4]=a.getPrenom();
			modeleListe.insertRow(table.getRowCount(), donnees[0]);
			table.setRowHeight(20);
		}
	}
        
	
}